'''
 timeSeries ，其中 timeSeries[i] 表示哦的是第几秒 受到攻击
 
 在持续时间个 攻击时间差中 取最小值
 
'''
def findPoisonedDuration(self, timeSeries, duration):
    if not timeSeries:return 0
    count = 0
    length = len(timeSeries)
    for i in range(length):
       total = min(timeSeries[i+1]-timeSeries[i],duration)
       count += total
    
    return count+duration

'''
使用 区间合并/重叠处理
不直接 计算总时间。而是 一步步模拟每次攻击后 中毒状态是如何变化的 只累加 新增的中毒时间

想象一个时间轴。每发生一次攻击,就画一段中毒区间 但是如果有重叠，只算新覆盖的部分

维护一个变量 end ,表示当前中毒会持续到哪个时间点结束
end = 0 ## 初始无中毒

然后对 每次攻击时间 t:
如果 t > end,  说明上次中毒已经结束——>新增完整 duration 秒
如果 t <= end, 说明还在中毒期间——> 只新增从 end+1 到 t + duration - 1 的时间
更新 end = t + duration - 1
'''
def findPoisonedDuration(self, timeSeries, duration):
    if not timeSeries:return 0
    total = 0
    end = 0
    
    for t in timeSeries:
        if t>end:
            total += duration
        else:
            ## 新增时间
            newtime = t+duration+1-end
            total += newtime
        ## 更新中毒时间
        end = t+duration - 1
        
    return total
